import re

import pandas as pd

from PD import PdUtil


def 初始化(company):
    columns = ["所属乡镇/街道", "所属路/巷/行政村", "所属小区/学校/自然村/胡同", "所属楼", "所属单元",
               "所属层",
               "分级简称"]

    df = pd.read_csv(f'/fttr/{company}房号.csv', dtype=str, usecols=columns)
    df = df.dropna(subset=['分级简称'])
    df['分级简称'] = df['分级简称'].str.replace('室', "")
    df['分级简称'] = df['分级简称'].str.replace('号', "")
    df = df[df['分级简称'].str.isdigit()]

    t = pd.read_csv(r"D:\家宽\综资\综资数据(更新至2025年4月29日)\小区.csv", usecols=['中文名称', '网元内部编码'],
                    encoding='gbk',
                    dtype=str)
    t.rename(columns={'网元内部编码': '小区ID', '中文名称': "所属小区/学校/自然村/胡同"}, inplace=True)
    df = df.merge(t, on="所属小区/学校/自然村/胡同")

    df['楼'] = df.apply(
        lambda row: row['所属楼'].replace(row['所属小区/学校/自然村/胡同'], ''),
        axis=1
    )
    df['单元'] = df.apply(
        lambda row: row['所属单元'].replace(row['所属楼'], ''),
        axis=1
    )
    df['层'] = df.apply(
        lambda row: row['所属层'].replace(row['所属单元'], ''),
        axis=1
    )

    df.rename(columns={
        "所属小区/学校/自然村/胡同": "小区名称",
        "分级简称": "室"
    }, inplace=True)

    df.to_csv(f'/fttr/{company}所有地址.csv', index=False)


def 拆地址(company):
    df = pd.read_csv(f'/fttr/{company}所有地址.csv')
    # df = pd.read_csv(f'/fttr/t.csv')

    # 定义正则表达式，用于匹配楼号前的数字
    pattern = r'(\d+)[号#]楼'
    pattern2 = r'(\d+)单元'
    pattern3 = r'(\d+)层'

    # 使用 str.extract 方法进行匹配，并将结果存储在新列 b 中
    df['楼号'] = df['楼'].str.extract(pattern)
    df['单元号'] = df['单元'].str.extract(pattern2)
    df['层号'] = df['层'].str.extract(pattern3)
    # 定义正则表达式模式
    pattern = r'(.*(?:园|府|阁|院|区|地块))'
    compiled_pattern = re.compile(pattern)

    # 自定义函数
    def extract_first_match(s):
        if pd.notna(s):  # 检查 s 是否为有效字符串
            match = compiled_pattern.search(s)
            if match:
                return next((group for group in match.groups() if group is not None), None)
        return None

    # 应用自定义函数
    df['extracted'] = df['楼'].apply(extract_first_match)
    df['extracted'] = df['extracted'].fillna('无')
    PdUtil.to_csv(f"/fttr/{company}所有地址格式化.csv", df)


def tt(company):
    df = pd.read_csv(f'/fttr/{company}所有地址格式化.csv', dtype=str)
    df2 = pd.read_csv(fr"D:\fttr\{company}-推荐组网-是否需要整改.csv", dtype=str,
                      usecols=['小区ID', '小区名称', '楼号', '单元号', '层号', '室号', '实际组网类型', '用户账号',
                               '是否家庭网弱覆盖',
                               '是否fttr',
                               '是否智能组网路由器', '是否需要整改', 'extracted', '推荐组网类型',
                               '实际数量', '智能组网路由器数', 'fttr路由器数', 'sa路由器数', 'fttr类型'])

    df2 = df2[~df2['推荐组网类型'].isin(['小区不一致'])]

    df2['室号2'] = df2['室号'].str[-2:]
    temp = df2[['小区ID', '小区名称', '楼号', '单元号', '室号2', 'extracted', '推荐组网类型']].drop_duplicates()
    temp.rename(columns={'小区名称': '小区简称'}, inplace=True)
    df['室号'] = df['室'].str.replace(r'[房室户号]', '', regex=True)
    df['室号2'] = df['室号'].str[-2:]
    df = df.merge(temp, on=['小区ID', '楼号', '单元号', '室号2', 'extracted'], how='left')
    df = df.dropna(subset=['推荐组网类型'])
    df2['是否已安装宽带'] = '是'
    temp = df2[
        ['小区ID', '楼号', '单元号', '层号', '室号', '实际组网类型', '用户账号', '是否已安装宽带', '是否家庭网弱覆盖',
         '是否fttr',
         '是否智能组网路由器', '是否需要整改', 'extracted', '实际数量', '智能组网路由器数', 'fttr路由器数',
         'sa路由器数', 'fttr类型']].drop_duplicates()

    df = df.merge(temp,
                  on=['小区ID', '楼号', '单元号', '层号', '室号', 'extracted'], how='left')
    PdUtil.to_csv(f'/fttr/{company}推荐.csv', df)


if __name__ == '__main__':
    company = '大兴'
    初始化(company)
    拆地址(company)
    tt(company)
